home *** CD-ROM | disk | FTP | other *** search
/ CICA 1993 April / CICA MS Windows - April 1993.iso / unzipped / util / enhpcp1 / ftp.was < prev    next >
Text File  |  1992-12-01  |  12KB  |  285 lines

  1. ;"Ftp" - Auto FTP/download script
  2.  
  3. ;Script to read filenames from a text file, then ftp
  4. ;and download them, one at a time.  Useful for those with small
  5. ;disk quotas.
  6. ;
  7. ;The idea is to give it a list of sites, directories, and files.
  8. ;It will then ftp to the first site, cd to the first dir, and get
  9. ;the first file, which it then downloads.  It then deletes the first file,
  10. ;ftps to the second site, cds to the second directory, etc.
  11. ;It's not perfect, but I find it very useful.  I tried to comment it
  12. ;as much as I could, but all the commenting was done after the whole
  13. ;thing was written, so I hope it all makes sense.
  14.  
  15. ;Be sure the change the system prompt variable and the occurance
  16. ;of an e-mail address before compiling.  To locate the single
  17. ;occurance of an e-mail address (currently mine - should be
  18. ;yours), search for the @ character.
  19.  
  20. ;Shares a file with a companion script "ftptry" (file which
  21. ;contains names and working directories of favorite
  22. ;ftp sites.
  23. ;
  24. ;please send any comments, criticisms, complaints, praises, donations (haha) to
  25. ;Erick Hammersmark, ehammers@u.washington.edu
  26. ;
  27. string FtpSite,FtpDir,Ftpfile,ViewList
  28. string ListSite,ListDir,ListFile,ListEntry
  29. string PROMPT = "stein%",LookFile = "c:\prowin\file.txt"    ;rember to change prompt to match your system
  30. string SiteList = "c:\prowin\sites.txt"
  31. integer NotDone = 1,Ftpdone = 0,index,length
  32.  
  33. proc main
  34. call GetList                                ;enter new sites/dirs/files
  35. fopen 1 "c:\prowin\files.txt" READWRITE TEXT    ;open file containing sites/dirs/files
  36. call ReadList
  37.    while NotDone                            ;Loop until reaching the end of the text file.
  38.       call InitFtp
  39.       waitfor "ftp>"                        ;Login to the ftp server.
  40.       transmit "bin^M"
  41.       waitfor "ftp>"                        ;Set type to "binary".
  42.       transmit "cd "
  43.       transmit FtpDir
  44.       transmit "^M"
  45.       waitfor "ftp>"                        ;Cd to directory where file is stored.
  46.       transmit "get "
  47.       transmit FtpFile
  48.       transmit "^M"
  49.       waitfor "ftp>" forever                ;Get the current file.
  50.       transmit "quit^M"
  51.       waitfor PROMPT                        ;End ftp session.
  52.       transmit "sb "                        ;Command to download file
  53.       transmit FtpFile                      ;may need to be altered to fit
  54.       transmit "^M"                         ;alternate systems.
  55.       waitfor "mode"
  56.       pause 5
  57.       getfile ymodem
  58.       waitfor PROMPT forever                ;download file
  59.       transmit "rm "
  60.       transmit FtpFile
  61.       transmit "^M"
  62.       waitfor PROMPT                        ;Delete downloaded file.
  63.       call ReadList                         ;Get next filename.
  64.    endwhile                                 ;End of loop.  Continues while NotDone is true.
  65.    fclose 1                                 ;Close text file.
  66.    transmit "logout^M"
  67.    waitfor "cts"                            ;Command to logout may need to be
  68.    transmit "exit^M"                        ;altered to fit alternate systems.
  69.    hangup
  70. endproc
  71.  
  72. proc ReadList                               ;procedure to read information from file.
  73.    fgets 1 FtpSite                          ;read name of ftp site
  74.    if feof 1                    ;if at end of file
  75.       NotDone = 0                           ;NotDone is set to false, ending loop in "main"
  76.    endif
  77.    fgets 1 FtpDir                           ;read name of ftp directory
  78.    fgets 1 FtpFile                          ;read name of ftp file
  79. endproc
  80.  
  81. proc GetList                                    ;procedure to enter sitenames, dirs, and filenames
  82. integer selection = 0                               ;a variable to hold $DIALOG
  83. ;call LookList
  84. ;updatedlg 16
  85. dialogbox 123 40 185 194 6 "Late Night FTP"
  86.    editbox 12 15 160 12 FtpSite                ;230
  87.    editbox 11 45 159 12 FtpDir                ;231
  88.    editbox 12 75 159 12 FtpFile                ;232
  89.    text  15 5 29 8 left "FTP site"
  90.    text  15 35 33 8 left "Directory"
  91.    text  15 67 36 8 left "Filename"
  92.    pushbutton 12 98 40 14 "Add" update default        ;30
  93.    pushbutton 72 98 40 14 "Close" normal        ;10
  94.    pushbutton 131 98 40 14 "Go" normal            ;11
  95.    flistbox 6 121 168 50 LookFile single ListEntry    ;130
  96.    pushbutton 22 175 40 14 "Delete" update        ;31    
  97.    pushbutton 119 175 40 14 "New" update        ;32
  98.    fcombobox 55 28 117 46 SiteList FtpSite sort        ;190    combo box gets its list from a
  99.                             ;    file it shares with "ftptry"
  100. enddialog
  101.    while 1                                              ;loop forever
  102.       selection = $DIALOG
  103.       if selection == 30                                ;if "add" is pressed
  104.          fopen 0 "c:\prowin\files.txt" READWRITE TEXT   ;open file
  105.          fseek 0 0 2                                    ;go to end of file
  106.          fputs 0 FtpSite
  107.          fputs 0 FtpDir
  108.          fputs 0 FtpFile                                ;write the site,dir,and filename
  109.          fclose 0                                       ;close file
  110.          call LookList
  111.          updatedlg 16
  112.       endif
  113.       if selection == 10                                   ;if "close" is pressed
  114.          exit                                              ;exit script
  115.       endif
  116.       if selection == 11                                   ;if "go" is pressed
  117.          destroydlg
  118.          exitwhile                                         ;leave the infinite "while" loop
  119.       endif
  120.       if selection == 31                ;if delete is pressed
  121.          call ParseListEntry
  122.          call DeleteItem
  123.          call LookList
  124.          updatedlg 16
  125.          updatedlg 128
  126.       endif
  127.       if selection == 32                                ;if "new" is pressed
  128.          fopen 0 "c:\prowin\files.txt" CREATE TEXT      ;erase old data file
  129.          fclose 0                                       ;close file
  130.          call LookList                    ;reread datafile
  131.          updatedlg 16                    ;update list box
  132.          FtpSite = ""
  133.          FtpDir = ""
  134.          FtpFile = ""                    ;clear inputs
  135.          updatedlg 128                    ;update editboxes
  136.          updatedlg 32                    ;update fcombobox
  137.       endif
  138.       if selection == 130                ;if flistbox selection is made
  139.          call ParseListEntry
  140.          updatedlg 128
  141.       endif
  142.       if selection == 190                ;if fcombobox selection is made
  143.          call GetWorkDir                ;get new directory
  144.          FtpFile = ""
  145.          updatedlg 128                    ;update editboxes
  146.       endif
  147.    endwhile
  148. endproc
  149.  
  150. proc ReCall                                 ;procedure to call an ftp site
  151.    transmit "ftp "
  152.    transmit FtpSite
  153.    transmit "^M"                            ;call the ftp site
  154. endproc
  155.  
  156. proc QuitFtp                                ;procedure to quit and recall an ftp site
  157.    transmit "quit^M"
  158.    waitfor PROMPT                           ;wait for system prompt (defined above)
  159.    call ReCall
  160. endproc
  161.  
  162. proc EndFtp                                 ;cleans up after connect established
  163.    FtpDone = 1                              ;tells InitFtp to stop looping
  164.    clearwhen target 0
  165.    clearwhen target 1
  166.    clearwhen target 2                       ;clears all the "when target" statements
  167. endproc
  168.  
  169. proc InitFtp
  170.    call ReCall                              ;call ftp site
  171.    when target 0 "530" call QuitFtp         ;if it's busy, quit and try again
  172.    when target 1 "):" call FtpLogin           ;if faced with a login prompt, login as anonymous
  173.    when target 2 "230" call EndFtp          ;when logged in, call the EndFtp procedure
  174.    while not FtpDone
  175.    endwhile
  176. endproc
  177.  
  178. proc FtpLogin                               ;procedure to login to ftp site
  179.    pause 1
  180.    transmit "anonymous^M"
  181.    waitfor "Password:"
  182.    transmit "ehammers@u.washington.edu^M"       ;your e-mail address goes here
  183. endproc
  184.  
  185. proc LookList                    ;creates new file for dlg box list to read
  186. string CharSpace = " "                ;Variable for ","
  187.    isfile "c:\prowin\files.txt"
  188.    if success                    ;if source file exists
  189.       fopen 2 "c:\prowin\files.txt" READ TEXT    ;open it
  190.    else                        ;if source file does not exist
  191.       fopen 2 "c:\prowin\files.txt" CREATE TEXT    ;create it to avoid errors
  192.    endif
  193.    fopen 3 "c:\prowin\file.txt" CREATE TEXT    ;create (erase) temp file
  194.    while 1                    ;loop indefinitely
  195.       ViewList = ""
  196.       fgets 2 ListSite                ;store site in variable
  197.      if feof 2                ;if at end of file
  198.         fclose 2
  199.         fclose 3                ;close both files
  200.         exitwhile                ;and exit indefinite loop
  201.      endif
  202.       fgets 2 ListDir
  203.       fgets 2 ListFile                ;store dir and filename
  204.       strcat ViewList ListSite
  205.       strcat ViewList CharSpace
  206.       strcat ViewList ListDir
  207.       strcat ViewList CharSpace
  208.       strcat ViewList ListFile            ;concatenate site/dir/file
  209.       fputs 3 ViewList                ;write new string to temp file
  210.    endwhile
  211. endproc
  212.  
  213. proc GetWorkDir                        ;procedure to get working directory to suggest
  214. string FtpSiteTwo
  215.    fopen 5 "c:\prowin\sitedirs.txt" READ TEXT        ;open shared working directory file
  216.    while 1
  217.       fgets 5 FtpSiteTwo                ;get next site name in file
  218.       fgets 5 FtpDir                    ;get next working dir in file
  219.       strcmp FtpSiteTwo FtpSite                ;if site read from file = site selected in combo box
  220.       if success
  221.          exitwhile                    ;exit loop
  222.       endif
  223.    endwhile
  224.    fclose 5
  225. endproc
  226.  
  227. #comment
  228. When a user clicks on an entry in the flistbox,
  229. the entry's site, directory, and file appear in the
  230. edit boxes.  Since the flistbox entry is stored as a
  231. single string, it must be separated into it's three
  232. component strings for insertion into the edit boxes
  233. #endcomment
  234.  
  235. proc ParseListEntry                    ;procedure to parse list box entry
  236. string PreserveEntry
  237.  PreserveEntry = ListEntry                ;preserve original flistbox entry in string
  238.  strlen ListEntry length                ;take length of list entry
  239.  strfind ListEntry " " index                ;find first space
  240.  strcpy FtpSite ListEntry index                ;copy ListEntry to FtpSite using all characters until first space
  241.  length = length - index
  242.  dec length                        ;update length variable to include only the remaining part of ListEntry, minus the space
  243.  strright ListEntry ListEntry length            ;take the rightmost characters
  244.  strfind ListEntry " " index                ;find next space
  245.  strcpy FtpDir ListEntry index                ;copy ListEntry to FtpDir using first "length"th characters
  246.  length = length - index
  247.  dec length                        ;update length and subtract for space
  248.  strright FtpFile ListEntry length            ;take FtpFile from list entry
  249.  ListEntry = PreserveEntry                ;restore ListEntry variable
  250. endproc
  251.  
  252. #comment
  253. This is probably the least efficient of all the routines in this
  254. script.  In order to delete a single entry from the data files,
  255. it recompiles the whole list.  Thus it is pretty slow with large
  256. lists.  Sorry about this, but this was a hard feature to
  257. incoperate!
  258. #endcomment
  259.  
  260. proc DeleteItem                        ;procedure to delete item from data file based on FListBox selection
  261.  fopen 2 "c:\prowin\files.txt" READ TEXT        ;open data file
  262.  fopen 3 "c:\prowin\file.txt" CREATE TEXT        ;create (overwrite) temp file
  263.  while 1
  264.   fgets 2 ListSite                    ;Get first site from data file
  265.   if feof 2                        ;if at the end of the data file
  266.    fclose 2
  267.    fclose 3
  268.    delfile "c:\prowin\files.txt"            ;delete old data file
  269.    rename "c:\prowin\file.txt" "c:\prowin\files.txt"    ;rename temp file to data file
  270.    exitwhile                        ;exit loop
  271.   endif
  272.   fgets 2 ListDir                    ;get dir from data file
  273.   fgets 2 ListFile                    ;get filename from data file
  274.   strcmp ListFile FtpFile                ;if filenames do not match
  275.   if not success
  276.    fputs 3 ListSite                    ;write data into temp file
  277.    fputs 3 ListDir
  278.    fputs 3 ListFile
  279.   endif
  280.  endwhile
  281. FtpSite = ""                        ;clear edit boxes to remove
  282. FtpDir = ""                        ;presence of unwanted entry.
  283. FtpFile = ""
  284. endproc
  285.